package com.cskaoyan.javase.oop1._13block._3static;

/**
 * 什么是静态代码块？
 * 语法：
 * 定义在类的成员位置，使用以下声明方式声明的代码块，称之为静态代码块
 * //成员位置
 * static{
 *
 * }
 * //成员位置
 *
 * 作用：在类加载过程中，会被执行的代码块。可以把静态代码块近似的看成一个在类加载过程中自动调用的一个静态成员方法。
 * 同样的，静态代码块的执行也是在类加载的第三步——初始化过程中执行的。
 *
 * 总结一下，目前为止，在类加载过程中，给静态成员变量赋值的方式：
 *      1.默认初始化具有默认值
 *      2.显式赋值
 *      3.静态代码块赋值
 * 默认值赋值肯定是第一步,而显式赋值和静态代码块赋值是按照代码的书写顺序,从上往下执行的
 *
 * 静态代码块在实际开发中，并不常见。根据它的一些特点，可以总结一下它的使用场景
 * 复杂的静态成员变量的赋值
 * （最经典的）JavaEE中加载JDBC驱动
 * 如果有一段代码从始至终，只运行一次，可以写到静态代码块(因为类加载只有一次,静态代码块也只会执行一次)
 * 比如一些初始化工作
 *
 * 除此之外,静态代码块还可以用来测试类加载(因为类加载后,该类中的静态代码块就一定会执行)
 *
 *
 * @since 10:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    static {
        System.out.println("Demo类类加载了");
    }
    public static void main(String[] args) {
        System.out.println(Phone.brand);
    }
}

class Phone {
    static {
        // brand = "三星";
        System.out.println("Phone类加载了");
        int price1 = new Phone().price;
    }

    static String brand = "苹果";
    int price;


}
